%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% vim:enc=utf-8:ts=5:sw=5:et:ff=unix:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\chapter{Movendo-se no Documento}
\label{cha:Movendo-se no Documento}
\vimhelp{motion.txt}

A fim de facilitar o entendimento acerca das teclas e atalhos de movimentação,
faz-se útil uma breve recapitulação de conceitos relacionados. Para se entrar
em modo de inserção, estando em modo normal, pode-se pressionar qualquer uma
das teclas abaixo:
\index{modos de operação}
\begin{verbatim}
     i ..... entra no modo de inserção antes do caractere atual
     I ..... entra no modo de inserção no começo da linha
     a ..... entra no modo de inserção após o caractere atual
     A ..... entra no modo de inserção no final da linha
     o ..... entra no modo de inserção uma linha abaixo
     O ..... entra em modo de inserção uma linha cima
     <Esc> . sai do modo de inserção
\end{verbatim}

\index{movendo-se!entre caracteres}
Uma vez no modo de inserção todas as teclas são exatamente como nos outros
editores simples, caracteres que constituem o conteúdo do texto sendo digitado.
Para sair do modo de inserção e retornar ao modo normal digita-se \verb+<Esc>+
ou \verb+Ctrl-[+. As letras {\tt h}, {\tt k}, {\tt l}, {\tt j} funcionam como
setas:

% A imagem que está aqui: http://www.linuxconfig.org/Vim_Tutorial
% ficaria muito boa no lugar desse verbatim abaixo.
% Apenas não a coloquei porque ela está em inglês e acho que não cabe.
% Fica como sugestão para alguém que saiba usar o gimp melhor que eu.
\begin{verbatim}
        k
     h     l
        j
\end{verbatim}
ou seja, a letra `{\tt k}' é usada para subir no texto, a letra `{\tt j}' para descer,
a letra `{\tt h}' para mover-se para a esquerda e a letra `{\tt l}' para mover-se para
a direita. A ideia é que se consiga ir para qualquer lugar do texto sem tirar
as mãos do teclado, sendo portanto alternativas para as setas de movimentação
usuais do teclado. Ao invés de manter os quatro dedos sobre H, J, K e L, é aconselhável 
manter o padrão de digitação com o indicador da mão esquerda sobre a tecla F e o da mão
direita sobre a letra J, sendo que seu indicador da mão direita vai alternar entre a
tecla J e H para a movimentação. 

\index{movendo-se!entre linhas}
Para ir para linhas específicas `{\em em modo normal}' digite:
\begin{verbatim}
     :n<Enter>  ..... vai para linha `n'
     ngg ............ vai para linha `n'
     nG ............. vai para linha `n'
\end{verbatim}
onde ``\verb|n|'' corresponde ao número da linha.  Para retornar ao modo normal
pressione \verb|<Esc>| ou use \verb|Ctrl-[| (\verb|^[|).

%\section{Os saltos}\label{Os saltos}
% a idéia é simplificar.
% sections demais prejudica o entendimento
% misturar o comando básico com o avançado afasta o usuário iniciante.
% eliminar o comando avançado afasta o usuário avançado
% O ideal é separar o básico (mais comum) do avançado (pouco comum para quem apenas edita texto) 
\index{movendo-se!efetuando saltos}
No vim é possível realizar diversos tipos de movimentos, também conhecidos como saltos no 
documento. A lista abaixo aponta o comandos de salto típicos.
\begin{verbatim}
     gg .... vai para o início do arquivo
     G ..... vai para o final do arquivo
     0 ..... vai para o início da linha
     ^ ..... vai para o primeiro caractere da linha (ignora 
             espaços)
     $ ..... vai para o final da linha
     25gg .. salta para a linha 25
     '' .... salta para a linha da última posição em que o cursor
             estava
     fx .... para primeira ocorrência de x
     tx .... Para ir para uma letra antes de x
     Fx .... Para ir para ocorrência anterior de x
     Tx .... Para ir para uma letra após o último x
     * ..... Próxima ocorrência de palavra sob o cursor
     `' .... salta exatamente para a posição em que o cursor
             estava
     gd .... salta para declaração de variável sob o cursor
     gD .... salta para declaração (global) de variável sob o 
             cursor
     w ..... move para o início da próxima palavra
     W ..... pula para próxima palavra (desconsidera hífens)
     E ..... pula para o final da próxima palavra (desconsidera 
             hifens)
     e ..... move o cursor para o final da próxima palavra
     zt .... movo o cursor para o topo da página
     zm .... move o cursor para o meio da página
     zz .... move a página de modo com que o cursor fique no 
             centro
     n ..... move o cursor para a próxima ocorrência da busca
     N ..... move o cursor para a ocorrência anterior da busca
\end{verbatim}

Também é possível efetuar saltos e fazer algo mais ao mesmo tempo, a lista abaixo aponta 
algumas dessas possibilidades. % Na verdade nenhum desses comandos são apenas movimentos. 
% Deixar aqui é interessante, mas não misturar com a lista acima
\begin{verbatim}     
     gv .... repete a última seleção visual e posiciona o cursor
             neste local
     % ..... localiza parênteses correspondente
     o ..... letra `o', alterna extremos de seleção visual
     yG .... copia da linha atual até o final do arquivo
     d$ .... deleta do ponto atual até o final da linha
     gi .... entra em modo de inserção no ponto da última edição
     gf .... abre o arquivo sob o cursor
\end{verbatim}

%\section{Big words}\label{Big words}
\index{movendo-se!em palavras grandes}\index{movendo-se!big words}
Para o Vim ``{\em{palavras-separadas-por-hífen}}'' são consideradas em separado, portanto se você usar,
em modo normal ``\verb+w+'' para avançar entre as palavras ele pulará uma de
cada vez, no entanto se usar ``\verb+W+''
em maiúsculo (como visto) ele pulará a ``a-palavra-inteira'' :)

\begin{verbatim}
     E .... pula para o final de palavras com hifen
     B .... pula palavras com hifen (retrocede)
     W .... pula palavras hifenizadas (começo)
\end{verbatim}

Podemos pular sentenças:
\index{movendo-se!entre sentenças}
\begin{verbatim}
     ) .... pula uma sentença para frente
     ( .... pula uma sentença para trás
     } .... pula um parágrafo para frente
     { .... pula um parágrafo para trás
     y) ... copia uma sentença para frente
     d} ... deleta um parágrafo para frente
\end{verbatim}

% muito deslocado, isso é movimentar no arquivo ? Parece que sim.
Caso tenha uma estrutura como abaixo:

\begin{verbatim}
     def pot(x):
        return x**2
\end{verbatim}

E tiver uma referência qualquer para a função \verb+pot+ e desejar
mover o cursor até sua definição basta posicionar o cursor sobre a palavra
\verb+pot+ e pressionar (em modo normal):

\begin{verbatim}
     gd
\end{verbatim}

Se a variável for global, ou seja, estiver fora do documento
(provavelmente em outro) use:

\begin{verbatim}
     gD
\end{verbatim}

Quando definimos uma variável tipo
\index{variável}

\begin{verbatim}
     var = `teste'
\end{verbatim}

e em algum ponto do documento houver referência a esta variável e se
desejar ver seu conteúdo fazemos

\begin{verbatim}
     [i
\end{verbatim}

Na verdade o atalho acima lhe mostrará o último ponto onde foi feita a
atribuição àquela variável que está sob o cursor, uma mão na roda para os
programadores de plantão!  {\Large {\ding{45}}} Observe a  barra de status do
Vim se o tipo de arquivo está certo, tipo. Para detalhes sobre como
personalizar a barra de status na seção \ref{Função para barra de status}.

\begin{verbatim}
     ft=python
\end{verbatim}

a busca por definições de função só funciona se o tipo de arquivo
estiver correto

\begin{verbatim}
     :set ft=python
\end{verbatim}

{\Large \ding{45}} Um mapeamento interessante que facilita a movimentação até
linahas  que contenham determinada palavra de um modo bem simples, bastando
pressionar \verb|,f| pode ser feito assim:

\begin{verbatim}
map ,f [I:let nr = input("Which one: ")<Bar>exe "normal " . nr ."[\t"<CR>
\end{verbatim}

Uma vez definido o mapeamento acima e pressionando-se o atalho associado, que
neste caso é \verb|,f| o vim exibirá as uma oppção para pular para as ocorrências 
da palavra assim:

\begin{verbatim}
    1:  trecho contendo a palavra
    2:  outro trecho contendo a palavra
    Which one: 
\end{verbatim}


outro detalhe para voltar ao último ponto em que você estava

\begin{verbatim}
     ''
\end{verbatim}

A maioria dos comandos do Vim pode ser precedida por um quantificador:

\begin{verbatim}
     5j ..... desce 5 linhas
     d5j .... deleta as próximas 5 linhas
     k ...... em modo normal sobe uma linha
     5k ..... sobe 5 linhas
     y5k .... copia 5 linhas (para cima)
     w ...... pula uma palavra para frente
     5w ..... pula 5 palavras
     d5w .... deleta 5 palavras
     b ...... retrocede uma palavra
     5b ..... retrocede 5 palavras
     fx ..... posiciona o cursor em ``x''
     dfx .... deleta até o próximo ``x''
     dgg .... deleta da linha atual até o começo do arquivo
     dG ..... deleta até o final do arquivo
     yG ..... copia até o final do arquivo
     yfx .... copia até o próximo ``x''
     y5j .... copia 5 linhas
\end{verbatim}

% isso é movimentar, e movimentar diferente...
\section{Paginando}
\label{Paginando}

Para rolar uma página de cada vez (em modo normal)

\begin{verbatim}
     Ctrl-f
     Ctrl-b
\end{verbatim}

\begin{verbatim}
     :h jumps . ajuda sobre a lista de saltos
     :jumps ... exibe a lista de saltos
     Ctrl-i ... salta para a posição mais recente
     Ctrl-o ... salta para a posição mais antiga
     '0 ....... abre o último arquivo editado
     '1 ....... abre o penúltimo arquivo editado
     gd ....... pula para a definição de uma variável
     } ........ pula para o fim do parágrafo
     10| ...... pula para a coluna 10
     [i ....... pula para definição de variável sob o cursor
\end{verbatim}

Observação: lembre-se

\begin{verbatim}
     ^ .... equivale a Ctrl
     ^I ... equivale a Ctrl-I
\end{verbatim}

É possível abrir vários arquivos tipo \verb|vim *.txt|. Editar
algum arquivo, salvar e ir para o próximo arquivo com o comando à
seguir:

\begin{verbatim}
     :wn
\end{verbatim}

Ou voltar ao arquivo anterior

\begin{verbatim}
     :wp
\end{verbatim}

É possível ainda ``rebobinar'' sua lista de arquivos.

\begin{verbatim}
     :rew[wind]
\end{verbatim}

Ir para o primeiro

\begin{verbatim}
     :fir[st]
\end{verbatim}

Ou para o último

\begin{verbatim}
     :la[st]
\end{verbatim}

% idem, movimentar no arquivo e movimentar de forma avançada.
\section{Usando marcas}
\label{sec:UsandoMarcas}
\vimhelp{mark-motions}

As marcas são um meio eficiente de se pular para um local no arquivo. Para
criar uma,  estando em modo normal faz-se:

\begin{verbatim}
     ma
\end{verbatim}

Onde `{\tt m}' indica a criação de uma marca e `{\tt a}' é o nome da marca.
Para pular para a marca `{\tt a}':

\begin{verbatim}
     `a
\end{verbatim}

Para voltar ao ponto do último salto:

\begin{verbatim}
     ''
\end{verbatim}

Para deletar de até a marca `{\tt a}' (em modo normal):

\begin{verbatim}
     d'a
\end{verbatim}

\subsection{Marcas globais}

Durante a edição de vários arquivos pode-se definir uma marca global com o
comando:

\begin{verbatim}
     mA
\end{verbatim}

Onde `{\tt m}' cria a marca e `{\tt A}' (maiúsculo) define uma marca `{\tt A}'
acessível a qualquer momento com o comando:

\begin{verbatim}
     'A
\end{verbatim}

Isto fará o Vim dar um salto até a marca `{\tt A}' mesmo que esteja em outro arquivo,
mesmo que você tenha acabado de fecha-lo. Para abrir e editar vários arquivos
do Vim fazemos:

\begin{verbatim}
     vim *.txt ......... abre todos os arquivos `txt'
     :bn ............... vai para o próximo da lista
     :bp ............... volta para o arquivo anterior
     :ls ............... lista todos os arquivos abertos
     :wn ............... salva e vai para o próximo
     :wp ............... salva e vai para o prévio
\end{verbatim}

%\section{Usando marcadores}
% \label{Usando marcadores}
% 
% No Vim podemos marcar o ponto em que o cursor está para poder retornar
% rapidamente, certifique-se de estar em modo normal, para tanto pressiona-se \verb+<Esc>+,
% pressiona-se então a tecla ``\verb+m+'' seguida de uma das letras do alfabeto:
% 
% \begin{verbatim}
%      ma ....... cria uma marca `a'
%      `a ....... move o cursor para a marca `a'
% \end{verbatim}
% 
% % Isso abaixo é uma subsection da section usando marcadores.
% \subsection{Marcas globais}
% \label{Marcas globais}
% Marcas globais são marcas que permitem pular de um arquivo a outro.
% Para criar uma marca global use a letra que designa a marca em
% maiúsculo.
% 
% \begin{verbatim}
%      mA ....... cria uma marca global A
% \end{verbatim}
